package BanyuanClub.Study.Day0305;

import java.io.*;

/**
 * 将aaa.txt平均分成N个
 */
public class PrientFileN {

    public void Prient( File file,int n){
        //判断n是否超出范围
        if (n < 2 || n > 10){
            System.out.println("请输入2到10以内的数字");
        }
        //得到文件的字节数
        long len = file.length();
        //判断n输入是否小于文件字节数
        if (n > len){
            System.out.println("输入的n必须比文件字节数小，文件字节数为："+len);
        }
        //得到平均字节数
        long txt = len/n;
        //创建一个字节数组
        byte[] but = new byte[8];
        //通过循环创建n个文件
        for (int i = 0; i < n; i++) {
            try (BufferedInputStream bis =
                         new BufferedInputStream(
                                 new  FileInputStream(file));
                 BufferedOutputStream bos =
                         new BufferedOutputStream(
                                 new FileOutputStream(
                                         //令新创建的文件名为原文件名+i
                                         file.getName().substring
                                                 (0, file.getName().lastIndexOf("."))+(i+1)+".txt"))
            ){
                //跳过之前已复制的字节
                bis.skip(txt * i);
                //用三元运算符判断当进行最后一次分割时，文件字节数为平均字节数加剩余字节数
                long restlen = i < (n - 1) ? txt : len - txt * (n - 1);
                //while循环
                while ( restlen > 0 ){
                    //每次输出的字节数
                    int ilen = bis.read(but);
                    //将输出的字节输入到新文件中，三元运算符的作用为当最后一次输出字节数小于byte数组时，输出剩余字节
                    bos.write(but,0,(int)( restlen < ilen ? restlen : ilen));
                    bos.flush();
                    restlen -= ilen;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {

    }
}
